home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / 3dvect39 / main.asm < prev    next >
Assembly Source File  |  1994-10-30  |  43KB  |  1,233 lines

  1. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  2. ;
  3. ; Filename     : Main.asm
  4. ; Included from: Main Assembley Module
  5. ; Description  : Main demo of 3dvector library
  6. ;
  7. ; Written by: John McCarthy
  8. ;             1316 Redwood Lane
  9. ;             Pickering, Ontario.
  10. ;             Canada, Earth, Milky Way (for those out-of-towners)
  11. ;             L1X 1C5
  12. ;
  13. ; Internet/Usenet:  BRIAN.MCCARTHY@CANREM.COM
  14. ;         Fidonet:  Brian McCarthy 1:229/15
  15. ;   RIME/Relaynet: ->CRS
  16. ;
  17. ; Home phone, (905) 831-1944, don't call at 2 am eh!
  18. ;
  19. ; Send me your protected mode source code!
  20. ; Send me your Objects!
  21. ; But most of all, Send me a postcard!!!!
  22. ;
  23. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  24.  
  25.          .386p
  26.          jumps
  27.  
  28. code32   segment para public use32
  29.          assume cs:code32, ds:code32
  30.  
  31. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  32. ; define externals
  33. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  34.  
  35.          include pmode.ext                  ; protected mode externals
  36.          include xmouse.ext                 ; xmode mouse externals
  37.          include xmode.ext                  ; xmode externals by matt pritchard
  38.          include 3d.ext
  39.          include irq.ext
  40.          include stars.ext
  41.          include font.ext
  42.          include file.ext
  43.          include land.ext
  44.          include argc.ext
  45.          include joystick.ext
  46.          include fade.ext
  47.          include kb.ext
  48.          include function.ext
  49.          include clear.ext
  50.          include gus.ext
  51.          include fx.ext
  52.  
  53.          include macros.inc
  54.          include equ.inc
  55.  
  56.          include sphere.inc
  57.          include palette.inc                ; palette
  58.  
  59.          include objects.inc                ; table of shapes/colours
  60.          include stone0.inc
  61.          include stone1.inc
  62.          include stone2.inc
  63.          include stone3.inc
  64.          include stone4.inc
  65.          include stone5.inc
  66.          include stone6.inc
  67.          include stone7.inc
  68.          include stone8.inc
  69.          include stone9.inc
  70.          include stonea.inc
  71.          include stoneb.inc
  72.          include stonec.inc
  73.          include stoned.inc
  74.          include stonee.inc
  75.          include stonef.inc
  76.  
  77.          include font0.inc                  ; font 0
  78.          include font1.inc                  ; font 0
  79.          include font2.inc                  ; font length tables
  80.  
  81.          include explode.ext
  82.          include loadgif.ext
  83.          include dump.glz
  84.  
  85. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  86. ; code
  87. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  88.  
  89. giffile  db "main.gif",0
  90. giffile2 db "target.gif",0
  91.  
  92.          public _main
  93. _main:
  94.  
  95. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  96. ; get enviornment: current directory, current file
  97. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  98.  
  99.          sti
  100.          call _setup_env                    ; set up file envirionment (eg c:\temp\thisprog.exe )
  101.          call _initkb
  102.  
  103.          mov eax,_lomembase
  104.          mov _filebufloc,eax
  105.          mov _filebuflen,4000h
  106.          add _lomembase,4000h
  107.  
  108. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  109. ; sound effects stuff
  110. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  111.  
  112.         ;call _sfx_find
  113.  
  114.         ;mov edx,_lomembase          ; DMA buffer        * all this data is ignored *
  115.         ;mov ebx, 1024               ; DMA buffer size   *  if the user has a GUS   *
  116.         ;mov ecx, 22000              ; sample rate
  117.         ;mov eax,_lomembase
  118.         ;add eax, ebx                ; samples are right after DMA buffer
  119.         ;call _sfx_init              ; call this for both soundcards
  120.         ;imul ebx,14042              ; 14042 bytes of sample memory required (0 if GUS)
  121.         ;add _lomembase,eax          ; bump up low memory because of DMA (0 if GUS)
  122.         ;add _lomembase,ebx          ; bump up low memory because of samples required (0 if GUS)
  123.  
  124.         ;mov edi,offset soundname    ; list of sound effects to load...
  125.         ;mov edx,_lomembase
  126.         ;call _load_sams
  127.  
  128. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  129. ; check for and load 669 - link with argc,kb,gsp669,gs
  130. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  131.  
  132. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  133. ; get timer IRQ running
  134. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  135.  
  136.          call _irq_setpmirq                 ; set irq running - must be done at start for palette fading
  137.          mov ax, 21694                 ; 1193180/(55 frames a second)
  138.          call _irq_set_timer
  139.  
  140. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  141. ; explode DOS palette to common colour
  142. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  143.  
  144.          mov eax,00003f00h                  ; what color to fade to
  145.          mov bh,12                          ; how much to fade each pel
  146.          mov bl,255                         ; how often should i fade the palette
  147.         ;call _fade_all                     ; fade it...
  148.         ;call _wait_for_fade
  149.  
  150. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  151. ; fade palette to black
  152. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  153.  
  154.          mov eax,00000000h                  ; what color to fade to
  155.          mov bh,1                           ; how much to fade each pel
  156.          mov bl,120                         ; how often should i fade the palette
  157.         ;call _fade_all                     ; fade it...
  158.         ;call _wait_for_fade
  159.  
  160. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  161. ; set xmode
  162. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  163.  
  164.          pushw xmode
  165.          pushw xactual
  166.          pushw yactual
  167.          pushw pages
  168.          call _set_vga_modex
  169.          cmp ax,-1                          ; test for error in setting videomode
  170.          jne getout
  171.          pushw 1
  172.          call _set_active_page
  173.  
  174. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  175. ; wipe palette after xmode call ('cause INT 10h resets the palette)
  176. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  177.  
  178.          mov eax,00000000h
  179.          call _wipeoffpalette
  180.  
  181. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  182. ; set up pointers to object shape data
  183. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  184.  
  185.          call setupbase
  186.          call _joy_calibratejoystick
  187.  
  188. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  189. ; initialize xmode page flipping, font style, and get mouse ready
  190. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  191.  
  192.          mov esi,o _font0
  193.          mov edi,o _font1
  194.          mov ebp,o _fontlength
  195.          call _initfont
  196.  
  197.         ;pushw 150
  198.         ;pushw 150
  199.         ;push offset ex3
  200.         ;push offset mousesavemap
  201.         ;pushw 0
  202.         ;pushw xactual
  203.         ;pushw 0
  204.         ;pushw yactual
  205.         ;call _show_mouse
  206.  
  207. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  208. ; draw borders, title, and cosmetic screen stuff
  209. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  210.  
  211.          mov esi,o runscreen                ; this uses the font.asm setup routines
  212.         ;call _fnt_tstring
  213.          mov esi,o runtext
  214.         ;call _fnt_tstring
  215.  
  216. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  217. ; use IRQ to fade palette on
  218. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  219.  
  220.          mov esi,o gamecolr
  221.          mov bh,1
  222.          mov bl,180
  223.          call _fade_palette_read
  224.  
  225. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  226. ; set clipping paramters (already done, but this shows how set new parameters)
  227. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  228.  
  229.          mov ax,xmin
  230.          mov bx,ymin
  231.          mov cx,xmax
  232.          mov dx,ymax
  233.         ;call _set_clip_absolute
  234.  
  235. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  236. ; set clipping parameters, (these are already set on startup so this isnt really needed)
  237. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  238.  
  239.          mov ax,xmin
  240.          mov bx,ymin
  241.          mov cx,xmax
  242.          mov dx,ymax
  243.          mov si,_xcenter
  244.          mov di,_ycenter
  245.         ;call _set_clip_offset
  246.  
  247. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  248. ; initialize the _bitmaps: remember first two words are x and y size
  249. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  250.  
  251.          mov _bitbase[0*4],offset sphere
  252.          mov _bitx[0*4],30
  253.          mov _bity[0*4],30
  254.  
  255.          mov _stonetbl[0*4],o headerf       ; stone texture table (second half), 16 shades spread over 32
  256.          mov _stonetbl[1*4],o headerf
  257.          mov _stonetbl[2*4],o headere
  258.          mov _stonetbl[3*4],o headere
  259.          mov _stonetbl[4*4],o headerd
  260.          mov _stonetbl[5*4],o headerd
  261.          mov _stonetbl[6*4],o headerc
  262.          mov _stonetbl[7*4],o headerc
  263.          mov _stonetbl[8*4],o headerb
  264.          mov _stonetbl[9*4],o headerb
  265.          mov _stonetbl[10*4],o headera
  266.          mov _stonetbl[11*4],o headera
  267.          mov _stonetbl[12*4],o header9
  268.          mov _stonetbl[13*4],o header9
  269.          mov _stonetbl[14*4],o header8
  270.          mov _stonetbl[15*4],o header8
  271.          mov _stonetbl[16*4],o header7
  272.          mov _stonetbl[17*4],o header7
  273.          mov _stonetbl[18*4],o header6
  274.          mov _stonetbl[19*4],o header6
  275.          mov _stonetbl[20*4],o header5
  276.          mov _stonetbl[21*4],o header5
  277.          mov _stonetbl[22*4],o header4
  278.          mov _stonetbl[23*4],o header4
  279.          mov _stonetbl[24*4],o header3
  280.          mov _stonetbl[25*4],o header3
  281.          mov _stonetbl[26*4],o header2
  282.          mov _stonetbl[27*4],o header2
  283.          mov _stonetbl[28*4],o header1
  284.          mov _stonetbl[29*4],o header1
  285.          mov _stonetbl[30*4],o header0
  286.          mov _stonetbl[31*4],o header0
  287.  
  288.          mov _xreftable[32*4],offset xref0 ; glenz vector cross referancing tables
  289.          mov _xreftable[33*4],offset xref0
  290.          mov _xreftable[34*4],offset xref1
  291.          mov _xreftable[35*4],offset xref1
  292.          mov _xreftable[36*4],offset xref2
  293.          mov _xreftable[37*4],offset xref2
  294.          mov _xreftable[38*4],offset xref3
  295.          mov _xreftable[39*4],offset xref3
  296.          mov _xreftable[40*4],offset xref4
  297.          mov _xreftable[41*4],offset xref4
  298.          mov _xreftable[42*4],offset xref5
  299.          mov _xreftable[43*4],offset xref5
  300.          mov _xreftable[44*4],offset xref6
  301.          mov _xreftable[45*4],offset xref6
  302.          mov _xreftable[46*4],offset xref7
  303.          mov _xreftable[47*4],offset xref7
  304.          mov _xreftable[48*4],offset xref8
  305.          mov _xreftable[49*4],offset xref8
  306.          mov _xreftable[50*4],offset xref9
  307.          mov _xreftable[51*4],offset xref9
  308.          mov _xreftable[52*4],offset xref10
  309.          mov _xreftable[53*4],offset xref10
  310.          mov _xreftable[54*4],offset xref11
  311.          mov _xreftable[55*4],offset xref11
  312.          mov _xreftable[56*4],offset xref12
  313.          mov _xreftable[57*4],offset xref12
  314.          mov _xreftable[58*4],offset xref13
  315.          mov _xreftable[59*4],offset xref13
  316.          mov _xreftable[60*4],offset xref14
  317.          mov _xreftable[61*4],offset xref14
  318.          mov _xreftable[62*4],offset xref15
  319.          mov _xreftable[63*4],offset xref15
  320.  
  321. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  322. ; plop some objects in space
  323. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  324.  
  325. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  326. ; camera location/angle
  327. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  328.  
  329.          mov esi,cameraobject               ; set the camera position
  330.          mov bx,0                           ; camera angle
  331.          mov cx,-16384
  332.          mov bp,0
  333.          call _set_angle
  334.          mov ebx,1350000                    ; camera position
  335.          mov ecx,20000
  336.          mov ebp,-15000
  337.          call _put_object
  338.  
  339. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  340. ; cube
  341. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  342.  
  343.          call _search_next_available_object ; return si as next available object (1)
  344.          call _init_object
  345.          mov ebx, 110000                    ; to this position (x,y,z)=ebx,ecx,ebp
  346.          mov ecx,250000                     ; locations are 32 bit
  347.          mov ebp,-700000
  348.          call _put_object                   ; plop..
  349.          mov bx,0                           ; angles are 16 bit
  350.          mov cx,0
  351.          mov bp,0
  352.          call _set_angle                    ; duhhh...i wonder what this call does...
  353.          call _set_object_on                ; turn object si on (make visible)
  354.          call _use_full_rotations           ; full rotations for this object (0)
  355.          mov _userotate[esi],0              ; full rotations for this object (0)
  356.          mov ax,0
  357.          call _set_shape                    ; set object si to shape ax
  358.          mov ebx,000545100h                 ; x,y,z angular velocities
  359.          mov ecx,000a91500h                 ; high word = number of turns/revolutions
  360.          mov ebp,000342300h                 ; lo word = final angle (position)
  361.          mov di,58000                       ; di = time to twist there (total frames)
  362.          call _twist_si                     ; set angular velocity
  363.          call _set_xyzvadds
  364.          mov bl,0                           ; set cross referencing palette (null)
  365.          call _set_xref_palette
  366.  
  367. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  368. ; wireframe cube
  369. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  370.  
  371.          call _search_next_available_object
  372.          call _init_object
  373.          mov ebx,230000
  374.          mov ecx,20000
  375.          mov ebp,190000
  376.          call _put_object
  377.          mov bx,0
  378.          mov cx,0
  379.          mov bp,0
  380.          call _set_angle
  381.          call _set_object_on
  382.          call _use_full_rotations           ; full rotations for this object (0)
  383.          mov ax,1
  384.          call _set_shape
  385.          mov ebx,000500000h
  386.          mov ecx,000200000h
  387.          mov ebp,000300000h
  388.          mov di,65500
  389.          call _twist_si
  390.          call _set_xyzvadds
  391.          mov bl,0
  392.          call _set_xref_palette
  393.  
  394. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  395. ; ring
  396. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  397.  
  398.          call _search_next_available_object
  399.          call _init_object
  400.          mov ebx,80000
  401.          mov ecx,170000
  402.          mov ebp,160000
  403.          call _put_object
  404.          mov bx,0
  405.          mov cx,0
  406.          mov bp,0
  407.          call _set_angle
  408.          call _set_object_on
  409.          call _use_full_rotations           ; full rotations for this object (0)
  410.          mov ax,2
  411.          call _set_shape
  412.          mov ebx,000310124h
  413.          mov ecx,0ffbc2340h
  414.          mov ebp,000530100h
  415.          mov di,16000
  416.          call _twist_si
  417.          call _set_xyzvadds
  418.          mov bl,0
  419.          call _set_xref_palette
  420.  
  421. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  422. ; diamond
  423. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  424.  
  425.          call _search_next_available_object
  426.          call _init_object
  427.          mov ebx,160000
  428.          mov ecx,-200000
  429.          mov ebp,-80000
  430.          call _put_object
  431.          mov bx,0
  432.          mov cx,0
  433.          mov bp,0
  434.          call _set_angle
  435.          call _set_object_on
  436.          call _use_full_rotations           ; full rotations for this object (0)
  437.          mov ax,3
  438.          call _set_shape
  439.          mov ebx,000600000h
  440.          mov ecx,0fff23400h
  441.          mov ebp,000100000h
  442.          mov di,21000
  443.          call _twist_si
  444.          call _set_xyzvadds
  445.          mov bl,0
  446.          call _set_xref_palette
  447.  
  448. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  449. ; rubine (flat diamond)
  450. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  451.  
  452.          call _search_next_available_object
  453.          call _init_object
  454.          mov ebx,-19000
  455.          mov ecx,19000
  456.          mov ebp,-240000
  457.          call _put_object
  458.          mov bx,0
  459.          mov cx,0
  460.          mov bp,0
  461.          call _set_angle
  462.          call _set_object_on
  463.          call _use_full_rotations           ; full rotations for this object (0)
  464.          mov ax,4
  465.          call _set_shape
  466.          mov ebx,000200000h
  467.          mov ecx,000100000h
  468.          mov ebp,0ffa00000h
  469.          mov di,12000
  470.          call _twist_si
  471.          call _set_xyzvadds
  472.          mov bl,0
  473.          call _set_xref_palette
  474.  
  475. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  476. ; vectorball cube thingy
  477. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  478.  
  479.          call _search_next_available_object ; this next object is the bitmaped cube
  480.          call _init_object
  481.          mov ebx,-150000                    ; remove this and see the speed of
  482.          mov ecx,-190000                    ; only vectors
  483.          mov ebp,120000
  484.          call _put_object                   ; note: the _bitmaps take a lot of cpu time
  485.          mov bx,0
  486.          mov cx,0
  487.          mov bp,0
  488.          call _set_angle
  489.          call _set_object_on
  490.          call _use_full_rotations           ; full rotations for this object (0)
  491.          mov ax,5
  492.          call _set_shape
  493.          mov ebx,000300000h
  494.          mov ecx,000700000h
  495.          mov ebp,000500000h
  496.          mov di,13000
  497.          call _twist_si
  498.          call _set_xyzvadds
  499.  
  500. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  501. ; stand alone _bitmap
  502. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  503.  
  504.          call _search_next_available_object ; stand alone bitmap - good for smoke or
  505.          call _init_object
  506.          mov ebx,-5000                      ; explosions
  507.          mov ecx,5000
  508.          mov ebp,25000
  509.          call _put_object                   ; set location
  510.          call _set_object_on                ; turn it on
  511.          mov ax,0                           ; zeroth _bitmap is shape
  512.          call _set_shape                    ; will load from _bitbase[0]
  513.          call _set_to_hi_bitmap             ; it's a bitmap...
  514.          mov bx,500                         ; _bitmap scaling (gets added to _bitx and _bity)
  515.          mov cx,500                         ; _bitmap scaling bx=x scaling, cx=y scaling
  516.          call _set_bitmap_scaling
  517.  
  518. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  519. ; this is the body of those wierd three blocks
  520. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  521.  
  522.          call _search_next_available_object
  523.          call _init_object
  524.          mov ebx,-190000
  525.          mov ecx,-280000
  526.          mov ebp,-140000
  527.          call _put_object
  528.          mov bx,0
  529.          mov cx,0
  530.          mov bp,0
  531.          call _set_angle
  532.          call _set_object_on
  533.          call _use_full_rotations
  534.          mov ax,6
  535.          call _set_shape
  536.          mov ebx,000600000h
  537.          mov ecx,0fff23400h
  538.          mov ebp,000200000h
  539.          mov di,16000
  540.          call _twist_si
  541.          call _set_xyzvadds
  542.          mov bl,0
  543.          call _set_xref_palette
  544.  
  545. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  546. ; this defines one "arm" of that wierd block - remember, it is "attached" to the body above
  547. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  548.  
  549.          inc esi
  550.          call _init_object
  551.          mov ebx,0/256                      ; this is not an actual object, it is only
  552.          mov ecx,0/256                      ; a reference to where the arm will get
  553.          mov ebp,0/256                      ; the angle data from.
  554.          call _put_object                   ; _put_object sets location of arm relative to body
  555.          mov bx,0
  556.          mov cx,0
  557.          mov bp,0
  558.          call _set_angle                    ; set initial angle of arm (relative to body)
  559.          call _set_object_off
  560.          call _set_sub_object_on
  561.          call _use_full_rotations           ; full = rotation is relative to body , no = arm angle is not relative to body
  562.         ;mov ax,xx                          ; arm shape is already defined in block above
  563.         ;call _set_shape
  564.          mov ebx,000200000h                 ; set anglular velocity of arm (relative to body)
  565.          mov ecx,000600000h
  566.          mov ebp,000120000h
  567.          mov di,22000
  568.          call _twist_si
  569.          call _set_xyzvadds
  570.          mov bl,0                           ; not an object, just angle and location data
  571.          call _set_xref_palette             ; so we dont need this
  572.  
  573. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  574. ; this defines the other "arm"
  575. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  576.  
  577.          inc esi
  578.          call _init_object
  579.          mov ebx,0/256                      ; the locations of sub_objects are /256 because of the way
  580.          mov ecx,0/256                      ; conversion between real space co-ordinates and object
  581.          mov ebp,0/256                      ; co-ordinates are calculated.  objects are 256 times larger than their appearance in real space
  582.          call _put_object                   ; this is because there is greater accuracy in real space!!
  583.          mov bx,0
  584.          mov cx,0
  585.          mov bp,0
  586.          call _set_angle
  587.          call _set_object_off
  588.          call _set_sub_object_on
  589.          call _use_full_rotations           ; full = rotation is relative to body , no = arm angle is not relative to body
  590.         ;mov ax,xx
  591.         ;call _set_shape
  592.          mov ebx,000220000h
  593.          mov ecx,0ff700000h
  594.          mov ebp,0ffe30000h
  595.          mov di,18000
  596.          call _twist_si
  597.          call _set_xyzvadds
  598.          mov bl,0
  599.          call _set_xref_palette
  600.  
  601. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  602. ; get objects moving
  603. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  604.  
  605.          call _irq_findcontrol
  606.          mov _irqcontrol[ecx*4],o _updvectors
  607.  
  608. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  609. ; make camera _rotate_point along z axis if you want - make sure equ.inc has "use_z equ yes"
  610. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  611.  
  612.          ;mov _eyezadds,50                  ; make the camera _rotate_point along it's z axis (just for fun)
  613.          ;mov esi,cameraobject
  614.  
  615. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  616. ; reset IRQ counter before animation begins
  617. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  618.  
  619.          call _irq_resetrastercount         ; done before any animation loop!!!
  620.  
  621. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  622. ; intialize 3d pointers\indexers\sortvalues
  623. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  624.  
  625.          call _init_tables                  ; initialize 3d vector stuff
  626.  
  627. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  628. ; example of how to point an object toward another object in a certin time
  629. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  630.  
  631.          ;mov esi,5                         ; an example of how to use _point_time
  632.          ;mov ebx,-10000                    ; si = obj, bx,cx,bp = location, di = time
  633.          ;mov ecx,-30000
  634.          ;mov ebp,90000
  635.          ;mov edi,150
  636.          ;call _point_time
  637.  
  638.          call _irq_findcontrol
  639.          mov _irqcontrol[ecx*4],offset _handle_explosions
  640.  
  641.          mov ebp,_himembase
  642.          mov dl,0
  643.          call _compile_background_dl
  644.          mov clearroutine,ebp
  645.  
  646.          mov cc3, edi
  647.  
  648.  
  649.          jmp jjjjj
  650.  
  651. clearroutine dd 0
  652. cc2          dd offset _ret
  653. cc3 dd 0
  654.  
  655. jjjjj:
  656.          mov _himembase,edi
  657.  
  658.          mov edx,offset giffile
  659.          call _openfile
  660.          jc nogif
  661.  
  662.          mov edx,_lomembase
  663.          mov ecx,_lomembase
  664.          add edx,8000h
  665.          mov eax,offset _readfile
  666.          call _loadgif
  667.  
  668.          if yactual lt 400
  669.          call _gif_squeeze_y
  670.          endif
  671.         ;call _gif_squeeze_y
  672.         ;call _gif_squeeze_x
  673.  
  674.          call _closefile
  675.  
  676.          push edx
  677.          push edx
  678.          push edx
  679.  
  680.          pushw 0
  681.          pushw 0
  682.          call _draw_bitmap
  683.          call _flip_page
  684.          pushw 0
  685.          pushw 0
  686.          call _draw_bitmap
  687.  
  688.          pop eax
  689.          mov bx,0
  690.          mov cx,0
  691.          mov dl,0
  692.          mov ebp,cc3
  693.          call _compile_foreground
  694.  
  695.          mov cc2,ebp
  696.          mov _himembase,edi
  697. nogif:
  698.          mov edx,offset giffile2
  699.          call _openfile
  700.          jc nogif2
  701.  
  702.          mov edx,_lomembase
  703.          mov ecx,_himembase
  704.          add edx,8000h
  705.          mov eax,offset _readfile
  706.          call _loadgif
  707.  
  708.          if yactual lt 400
  709.          call _gif_squeeze_y
  710.          endif
  711.  
  712.          call _closefile
  713.  
  714.          pushw 150
  715.          pushw 150
  716.          push edx
  717.          push offset mousesavemap
  718.          pushw 0
  719.          pushw xactual
  720.          pushw 0
  721.          pushw yactual
  722.          call _show_mouse
  723. nogif2:
  724.  
  725.  
  726.  
  727. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  728. ; THE MAIN LOOP...
  729. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  730.  
  731. ieox:
  732.  
  733. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  734. ; point an object toward the camera (just a cheap example)
  735. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  736.  
  737.          ;mov esi,0                         ; try uncommenting this!, this will point
  738.          ;mov edi,2
  739.          ;call _get_displacement
  740.          ;mov esi,2
  741.          ;mov  ax,_vys[esi*2]
  742.          ;mov  di,_vxs[esi*2]
  743.          ;call _point_z
  744.          ;mov esi,2
  745.          ;mov _vzs[esi*2],ax
  746.  
  747. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  748. ; debugging tool: would you believe some idiot actually called me to tell me I
  749. ;                 needed more debugging tools - I told him he  needs  to  stop
  750. ;                 writing programs with bugs...
  751. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  752.  
  753.          ;mov eax,your_problem              ; debugging tool                                                    mov eax,your_problem      ; debugging tool!!!!
  754.          ;mov _number_eax,eax
  755.          ;call _put_at_top
  756.  
  757. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  758. ; make sun move around
  759. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  760.  
  761.          ;add _y_angle_of_sun,150           ; watch the red ring carefully! the sun will move around the room!
  762.  
  763. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  764. ; make camera respond to joystick
  765. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  766.  
  767.          joystickobject equ 0
  768.  
  769.          call _joy_cartisianjoystick
  770.  
  771.          neg ebx                            ; makes the joystick like an airplane...sorta...
  772.          shr ebx,5
  773.          shr eax,5
  774.  
  775.          mov _vxadds[joystickobject*2],bx
  776.          mov _vyadds[joystickobject*2],ax
  777.          mov _vzadds[joystickobject*2],0
  778.          mov _acountx[joystickobject*2],65000
  779.          mov _acounty[joystickobject*2],65000
  780.          mov _acountz[joystickobject*2],65000
  781.          call _fix_xangle                   ; make it so user doesn wrap around upside down. (so stars wont mess up)
  782.  
  783. zapl:
  784.          call _joy_justgetbutton
  785.          test al,2                         ; test if second button pressed
  786.          jz dobut2
  787.  
  788.          dec d qqx
  789.  
  790.          and eax,1
  791.          xor eax,1
  792.          imul eax,18000
  793.  
  794.          mov esi,joystickobject             ; move camera...esi - object
  795.          mov ebp,eax                        ; ebp = speed (make it faster!)
  796.          mov edi,10                         ; edi = total time (not in calculation)
  797.          call _set_speed                    ; move object in direction it is pointing
  798.          call _set_xyzadds
  799.          jmp contxx
  800. dobut2:
  801. comment %
  802.          mov edx,offset _explode_main0
  803.          mov ebx,110000 ; x,y,z of explosion
  804.          mov ecx,25000
  805.          mov ebp,-700000
  806.          mov esi,0 ; scaling
  807.          mov edi,0
  808.          call _start_explosion
  809.          jc contxx
  810.  
  811.          push esi
  812.  
  813.          mov _xadds[esi*4],05000
  814.          mov _zadds[esi*4],20000
  815.          mov _lcount[esi*2],300
  816.  
  817.          mov edx,offset _explode_small
  818.          mov ebx,180000 ; x,y,z of explosion
  819.          mov ecx,85000
  820.          mov ebp,-600000
  821.          mov esi,0 ; scaling
  822.          mov edi,0
  823.          call _start_explosion
  824.  
  825.          pop esi
  826.  
  827.          xor eax,randomnumber
  828.          xor eax,edx
  829.          xchg al,ah
  830.          add eax,0cd9c9a8fh
  831.          xor eax,esi
  832.          add eax,edi
  833.          xor eax,0526dafb2h
  834.          add eax,ecx
  835.          xor eax,ebx
  836.          add eax,ebp
  837.          mov randomnumber,eax
  838.          in al,64
  839.          shl eax,8
  840.          in al,65
  841.          shl eax,8
  842.          in al,64
  843.          shl eax,8
  844.          in al,64
  845.          add randomnumber,eax
  846.          mov ecx,randomnumber
  847.  
  848.          call _get_location
  849.          call _subtract_camera
  850.          call _determine_volume
  851.          call _determine_panning
  852.  
  853.  
  854.          mov ax,0
  855.          mov dl,0
  856.          mov cl,0
  857.  
  858.          and ch,7
  859.          mov ch,30
  860.          call _play_sample
  861.  
  862.  
  863.          jmp contxx
  864.  
  865. randomnumber    dd 5fe6c809h
  866.         %
  867.          and eax,2
  868.          shr eax,1
  869.          xor eax,1
  870.          imul eax,-18000                    ; if button 2 pressed, move camera backwards
  871.  
  872.          mov esi,joystickobject             ; move camera...esi - object
  873.          mov ebp,eax                        ; ebp = speed (make it faster!)
  874.          mov edi,10                         ; edi = total time (not in calculation)
  875.          call _set_speed                    ; move object in direction it is pointing
  876.          call _set_xyzadds
  877. contxx:
  878.  
  879. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  880. ; set camera rotation matrix - done once per frame so other routines know how to plot objects
  881. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  882.  
  883.          call _copy_virtual_objects
  884.          call _setsincose                   ; set rotation multipliers for eye
  885.         ;call _land_draw                    ; draw background landscape
  886.  
  887.          mov edi,_current_page
  888.          call clearroutine
  889.  
  890.         ;call _clearfill                    ; clear video memory before plot
  891.  
  892.         ;mov esi,1
  893.         ;mov edi,50000
  894.         ;mov ebp,9200
  895.         ;call _set_speed
  896.         ;call _set_xyzadds
  897.  
  898. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  899. ; plot the stars in the _background
  900. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  901.  
  902.          call _star_plot                    ; plot background stars
  903.  
  904. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  905. ; plot all objects on screen
  906. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  907.  
  908.          call _makeobjs                     ; plot all objects in sides table
  909.  
  910. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  911. ; plot mouse on screen - only a 1 page mouse so it flickers on two pages
  912. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  913.  
  914. ;         call _instant_mouse               ; plot mouse on screen
  915. ;         call _plot_mouse
  916.  
  917. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  918. ; show how long it took to draw that last screen
  919. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  920.  
  921.          ;mov eax,_irq_tracespast           ; show number of traces past per re-draw
  922.          ;mov _number_eax,eax
  923.          ;call _put_at_top
  924.  
  925.          mov edi,_current_page
  926.          mov al,1
  927.          call cc2
  928.  
  929. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  930. ; show user the new screen
  931. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  932.  
  933.          call _flip_page                    ; flip video pages
  934.  
  935. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  936. ; test escape key - if none, return to top of main loop
  937. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  938.  
  939.          in al,60h                          ; test keyboard
  940.          cmp al,1
  941.          jne ieox
  942. ieo_x2:
  943.          in al,60h                          ; test keyboard
  944.          cmp al,1
  945.          je ieo_x2
  946. getout:
  947.  
  948. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  949. ; make endpage screen
  950. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  951.  
  952.          mov eax,0
  953.          mov bh,3
  954.          mov bl,200
  955.          call _fade_all
  956.         ;call _wait_for_fade
  957.  
  958.          call _mode03
  959.          mov eax,0
  960.          call _wipeoffpalette
  961.  
  962.          mov edx,offset endtext
  963.          call _putdosmsg
  964.  
  965.          mov esi,o _default_palette
  966.          mov bh,3
  967.          mov bl,255
  968.          call _fade_palette_read
  969.          call _wait_for_fade
  970.          call _resetkb
  971.  
  972.          call _irq_resetpmirq               ; reset irq vectors
  973.          call _sfx_uninit                   ; done, clear soundcard
  974.  
  975.          jmp _exit
  976.  
  977. qqx dd 400
  978.  
  979. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  980. ; sample routines to show how to use some routines
  981. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  982.  
  983. comment  %
  984.          push offset gamecolr
  985.          pushw 0
  986.          pushw 255
  987.          pushw 1
  988.          call _load_dac_registers
  989. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  990.  
  991.          mov esi,04                         ; esi = object
  992.          mov edi,55                         ; edi = time to get there (# of frames)
  993.          call _cam_newfollow
  994. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  995.  
  996.          mov ebx,x
  997.          mov ecx,y
  998.          mov ebp,z
  999.          mov edi,time
  1000.          mov esi,cameraobject
  1001.          call _move_si
  1002. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1003.  
  1004.          block 0,0,319,399,14
  1005.          call _flip_page
  1006.          block 0,0,319,399,14
  1007. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1008.  
  1009.          call _flip_page                    ; example of how to draw a single polygon
  1010.  
  1011.          p1x equ -50
  1012.          p1y equ -50
  1013.          p2x equ -90
  1014.          p2y equ 70
  1015.          p3x equ 60
  1016.          p3y equ 80
  1017.  
  1018.          mov _x1,p1x
  1019.          mov _y1,p1y
  1020.          mov _x2,p2x
  1021.          mov _y2,p2y
  1022.          call _fakeline_horz
  1023.  
  1024.          mov _x1,p2x
  1025.          mov _y1,p2y
  1026.          mov _x2,p3x
  1027.          mov _y2,p3y
  1028.          call _fakeline_horz
  1029.  
  1030.          mov _x1,p3x
  1031.          mov _y1,p3y
  1032.          mov _x2,p1x
  1033.          mov _y2,p1y
  1034.          call _fakeline_horz
  1035.  
  1036.          mov _colq,7
  1037.          mov steel,-1
  1038.          call _polyfill
  1039.  
  1040.          call _flip_page
  1041.  
  1042. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1043.  
  1044.          mov si,6                           ; move cube around...si - object
  1045.          mov ebp,45000                      ; ebp = speed (make it faster!)
  1046.          mov di,600                         ; di = total time (not in calculation)
  1047.          call _set_speed                    ; move object in direction it is pointing
  1048.          call _set_xyzadds
  1049. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1050. %
  1051.  
  1052. gtab     db 010h,011h,012h,013h,014h,015h,016h,017h
  1053.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1054.          db 011h,012h,013h,014h,015h,016h,017h,018h
  1055.          db 019h,01ah,01bh,01ch,01dh,01eh,01fh,01fh
  1056.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1057.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1058.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1059.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1060.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1061.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1062.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1063.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1064.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1065.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1066.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1067.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1068.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1069.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1070.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1071.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1072.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1073.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1074.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1075.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1076.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1077.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1078.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1079.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1080.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1081.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1082.          db 010h,011h,012h,013h,014h,015h,016h,017h
  1083.          db 018h,019h,01ah,01bh,01ch,01dh,01eh,01fh
  1084.  
  1085.          public _putdosmsg
  1086. _putdosmsg:
  1087.          push ax
  1088.          push edx
  1089.          add edx,_code32a
  1090.          mov al,dl
  1091.          and ax,0fh
  1092.          shr edx,4
  1093.          mov v86r_ds,dx
  1094.          mov v86r_dx,ax
  1095.          mov v86r_ah,9
  1096.          mov al,21h
  1097.          int 33h
  1098.          pop edx
  1099.          pop ax
  1100.          ret
  1101.  
  1102. hextbl   db '0123456789ABCDEF'
  1103.  
  1104. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1105. ; Put 8 digit hex number to screen buffer
  1106. ; In:
  1107. ;   EAX - number to put
  1108. ;   EDI -> screen buffer location to put at
  1109. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1110. _puthexnum:
  1111.          push eax ebx ecx edx edi
  1112.          mov ebx,offset hextbl
  1113.          mov edx,eax
  1114.          mov ecx,8
  1115.          mov ah,0fh
  1116. puthexnuml0:
  1117.          rol edx,4
  1118.          mov al,dl
  1119.          and al,0fh
  1120.          xlat
  1121.          stosw
  1122.          loop puthexnuml0
  1123.          pop edi edx ecx ebx eax
  1124.          ret
  1125.  
  1126. wipe_v_memory:
  1127.          rlp edi,0a0000h                    ; wipe video memory
  1128.          mov ecx,320*200*4/4/4
  1129.          xor eax,eax
  1130.  
  1131.          rep stosd
  1132.  
  1133.          ret
  1134.  
  1135. endtext  db "Doesn't that red diamond look great!",13,10
  1136.          db 13,10
  1137.          db "John McCarthy tries to be a regular on Digital Pixel: (416) 298-1487",13,10
  1138.          db " and on the Toronto VR SIG: (416) 631-6625",13,10
  1139.          db 13,10
  1140.          db "Or write to this address:",13,10
  1141.          db 13,10
  1142.          db " John McCarthy",13,10
  1143.          db " 1316 Redwood Lane",13,10
  1144.          db " Pickering, Ontario.",13,10
  1145.          db " Canada, Earth, Milky Way. (for those out-of-towners)",13,10
  1146.          db " L1X 1C5",13,10
  1147.          db "$"
  1148.  
  1149. ; screen text for font routines
  1150.  
  1151. runscreen:
  1152.          border 0,0,xactual-1,yactual-1,16*3
  1153.          steelbox 3,3,xactual-1-3,yactual-1-3,16*3,28
  1154.          hole xmin+_xcenter-2,ymin+_ycenter-2,xmax+_xcenter+1,ymax+_ycenter+1,16*3
  1155.          fillarea xmin+_xcenter,ymin+_ycenter,xmax+_xcenter-1,ymax+_ycenter-1,0
  1156.          textend
  1157.  
  1158. runtext:
  1159.          newtext 35,13,14
  1160.          db "3D Vectors in 320x400 Mode-X"
  1161.  
  1162.          lowercase
  1163.  
  1164.          newtext 15,yactual-32,14
  1165.          db "Vector Routines by John McCarthy"
  1166.  
  1167.          newtext 11,yactual-22,9
  1168.          db "X-Mode Routines by Matt Pritchard"
  1169.  
  1170.          newtext 23,yactual-12,12
  1171.          db "Protected Mode Header by TRAN"
  1172.  
  1173.          textend
  1174.  
  1175. mc       = 208                              ; mouse colour block (cyan)
  1176.  
  1177. mousebitmap:
  1178.          dw 9,9                             ; 9x9 mouse
  1179.  
  1180.          db mc+12,mc+12,mc+12,mc+12,mc+12,mc+12,mc+12,mc+12, 0 ; hmmm, I wonder  where
  1181.          db mc+02,mc+10,mc+11,mc+11,mc+11,mc+11,mc+05, 0, 0    ; this mouse image came
  1182.          db mc+01,mc+08,mc+11,mc+11,mc+11,mc+06, 0, 0, 0       ; from?...sorry guys..
  1183.          db mc+00,mc+07,mc+11,mc+11,mc+11,mc+11,mc+12, 0, 0
  1184.          db mc+00,mc+05,mc+11,mc+06,mc+11,mc+11,mc+11,mc+12, 0
  1185.          db mc+00,mc+04,mc+03,mc+00,mc+03,mc+11,mc+11,mc+11,mc+12
  1186.          db mc+00,mc+02,mc+00, 0,mc+00,mc+03,mc+09,mc+05,mc+01
  1187.          db mc+00,mc+00, 0, 0, 0,mc+00,mc+03,mc+01, 0
  1188.          db 0, 0, 0, 0, 0, 0,mc+00, 0, 0
  1189.  
  1190. mousesavemap:
  1191.          db 64*64+4 dup (0)
  1192.  
  1193. ;mousebitmap:
  1194. ;         dw mousewidth,mouseheight
  1195. ;         db 9,9,9,9,9,0 ; simple 6x6 mouse
  1196. ;         db 9,9,9,9,0,0
  1197. ;         db 9,9,9,9,0,0
  1198. ;         db 9,9,9,9,9,0
  1199. ;         db 9,0,0,9,9,9
  1200. ;         db 0,0,0,0,9,0
  1201.  
  1202. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1203. ; Relate point to look and and "sky" point to X,Y and Z angles
  1204. ; In:
  1205. ;  EBX = x point to look at
  1206. ;  ECX = y point to look at
  1207. ;  EBP = z point to look at
  1208. ;  EAX = x "sky" point
  1209. ;  EDX = y "sky" point
  1210. ;  EDI = z "sky" point
  1211. ;  ESI = object to obtain angles from
  1212. ; Out:
  1213. ;  Angles for object ESI modified!
  1214. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  1215.  
  1216. _rel_point:
  1217.          push esi eax edx edi esi
  1218.          call _inverse_rotate
  1219.          call _calc_middle
  1220.          pop esi
  1221.          mov _vxs[esi*2],ax
  1222.          mov _vys[esi*2],bx
  1223.          mov di,ax
  1224.          mov ax,bx
  1225.          pop ebp ecx ebx
  1226.          call _point_z
  1227.          pop esi
  1228.          mov _vzs[esi*2],ax
  1229.          ret
  1230.  
  1231. code32   ends
  1232.          end
  1233.